"""
题目：打印出所有的"水仙花数"，所谓"水仙花数"是指一个三位数，其各位数字立方和等于该数本身。例如：153是一个"水仙花数"，
因为153=1的三次方＋5的三次方＋3的三次方。

程序分析：利用for循环控制100-999个数，每个数分解出个位，十位，百位。
"""


def calculate_daffodil_number() -> list[int]:
    """
    计算所有的水仙花数
    :return:result_list:水仙花数列表
    """
    result_list = []
    for i in range(100, 1000):
        total_num = 0
        num = i
        while (num > 0):
            d = num % 10
            num = int(num / 10)
            total_num += d * d * d
        if total_num == i:
            result_list.append(i)

    return result_list


daffodil_list = calculate_daffodil_number()
print(f"水仙花数为:{daffodil_list}")


def is_daffodil_number(num_param: int):
    """
    判断三位数是否是水仙花数
    :param num: 三位数
    :return:
    """
    num = num_param
    if 100 > num or num >= 1000:
        return False
    total_num = 0
    while (num > 0):
        d = num % 10
        num = int(num / 10)
        total_num += d * d * d
    if total_num != num_param:
        return False
    return True


print("--------------------------------------------------")
result_list = []
for num in range(100, 1000):
    if is_daffodil_number(num):
        result_list.append(num)
print(result_list)
